home *** CD-ROM | disk | FTP | other *** search
- ;;;;
- ;;;; S c r o l l c a n v a s . s t k -- Scroll Canvas composite widget
- ;;;;
- ;;;; Copyright ⌐ 1993-1996 Erick Gallesio - I3S-CNRS/ESSI <eg@unice.fr>
- ;;;;
- ;;;; Permission to use, copy, and/or distribute this software and its
- ;;;; documentation for any purpose and without fee is hereby granted, provided
- ;;;; that both the above copyright notice and this permission notice appear in
- ;;;; all copies and derived works. Fees for distribution or use of this
- ;;;; software or derived works may only be charged with express written
- ;;;; permission of the copyright holder.
- ;;;; This software is provided ``as is'' without express or implied warranty.
- ;;;;
- ;;;; Author: Erick Gallesio [eg@kaolin.unice.fr]
- ;;;; Creation date: 25-Mar-1995 11:03
- ;;;; Last file update: 2-Jul-1996 12:09
-
- (require "Tk-classes")
-
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;;;
- ;;;; <Scroll-canvas> class definition
- ;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (define-class <Scroll-canvas> (<Tk-composite-widget> <Canvas>)
- ((canvas :accessor canvas-of)
- (h-scrollbar :accessor h-scrollbar-of)
- (v-scrollbar :accessor v-scrollbar-of)
- (h-scroll-side :accessor h-scroll-side
- :allocation :virtual
- :init-keyword :h-scroll-side
- :slot-ref (lambda (o)
- (let ((hs (slot-ref o 'h-scrollbar)))
- (and (winfo 'ismapped hs)
- (get-keyword :side (pack 'info hs)))))
- :slot-set! (lambda (o v)
- (let ((hs (slot-ref o 'h-scrollbar)))
- (if v
- (pack hs :fill "x" :side v
- :before (slot-ref o 'canvas))
- (pack 'forget hs)))))
-
- (v-scroll-side :accessor v-scroll-side
- :allocation :virtual
- :init-keyword :v-scroll-side
- :slot-ref (lambda (o)
- (let ((vs (slot-ref o 'v-scrollbar)))
- (and (winfo 'ismapped vs)
- (get-keyword :side (pack 'info vs)))))
- :slot-set! (lambda (o v)
- (let ((vs (slot-ref o 'v-scrollbar)))
- (if v
- (pack vs :fill "y" :side v
- :before (slot-ref o 'canvas))
- (pack 'forget vs)))))
- ;; Non allocated slots
- (background :accessor background
- :init-keyword :background
- :allocation :propagated
- :propagate-to (frame canvas h-scrollbar v-scrollbar))
- (border-width :accessor border-width
- :allocation :propagated
- :init-keyword :border-width
- :propagate-to (frame))
- (relief :accessor relief
- :init-keyword :relief
- :allocation :propagated
- :propagate-to (frame))))
-
- ;;;;
- ;;;; <Scroll-canvas> methods
- ;;;;
-
- (define-method initialize-composite-widget ((self <Scroll-canvas>) initargs parent)
- (let* ((hs (make <Scrollbar> :parent parent :orientation "horizontal"))
- (vs (make <Scrollbar> :parent parent :orientation "vertical"))
- (c (make <Canvas> :parent parent)))
- ;; Set internal true slots
- (slot-set! self 'Id (slot-ref c 'Id))
- (slot-set! self 'canvas c)
- (slot-set! self 'h-scrollbar hs)
- (slot-set! self 'v-scrollbar vs)
-
- ;; Pack internal widgets (Warning: Order is dependant !!!!)
- (pack vs :fill 'y :side 'right)
- (pack c :expand #t :fill "both" :side 'bottom :after vs)
- (pack hs :fill 'x :after c)
-
- ;; Attach command to scrollbar and canvas
- (slot-set! c 'x-scroll-command (lambda l (apply (slot-ref hs 'Id) 'set l)))
- (slot-set! c 'y-scroll-command (lambda l (apply (slot-ref vs 'Id) 'set l)))
-
- (slot-set! hs 'command (lambda args (apply (slot-ref c 'Id) 'xview args)))
- (slot-set! vs 'command (lambda args (apply (slot-ref c 'Id) 'yview args)))
- ))
-
- (provide "Scrollcanvas")
-